package com.molichuxing.gateway.bff.car.services;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.result.ResponseResult;
import com.molichuxing.gateway.bff.car.entity.request.modify.CarDetailModifyVo;
import com.molichuxing.gateway.bff.car.entity.response.CarDetailVo;
import com.molichuxing.gateway.bff.car.entity.response.CarVo;
import com.molichuxing.gateway.bff.car.entity.response.IovTrajectoryVo;
import com.molichuxing.gateway.utils.entity.UserEntity;
import com.molichuxing.services.infrastructure.dto.response.CarDto;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 车辆BFF
 */
public interface CarBffService {

	/**
	 * 根据条件查询车辆列表
	 * @param selectParams
	 * licencePlate(车牌) vin（车架号） vehicleId（车型） purchaseStartDate（采购开始时间） purchaseEndDate（采购结束时间）
	 * stockId（仓库id）  vehicleType（车辆类型）  status（1：未入网，2：已入网，3：在库车辆，4：在店车辆，5：业务中，6：非业务）   plateStatus（上牌状态）
	 * @param pageSize
	 * @param pageNum
	 * @return
	 */
	Paged<CarVo> getCarList(Map<String, Object> selectParams, Integer pageNum, Integer pageSize);

	/**
	 * 根据车辆id修改车辆详细信息
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyCarDetail(CarDetailModifyVo modifyDto);

	/**
	 * 根据车辆id获取车辆详细信息
	 * @param carId
	 * @return
	 */
	public CarDetailVo getCarDetail(Integer carId) throws Exception;

	/**
	 * 导入车辆信息
	 * @param sheet
	 * @return
	 */
	public Boolean uploadVehicleFile(Sheet sheet, UserEntity currentLoginUser) throws Exception;

	/**
	 * 导入车辆PDF信息
	 * @param purchaseInvoiceFile
	 * @param factoryCertificateFile
	 * @param conformityCertificateFile
	 * @param currentLoginUser
	 * @return
	 * @throws Exception
	 */
	public Boolean uploadVehiclePdfFile(MultipartFile purchaseInvoiceFile, MultipartFile factoryCertificateFile, MultipartFile conformityCertificateFile, UserEntity currentLoginUser, String zipFilePath) throws Exception;

	/**
	 * 根据vin获取车辆轨迹的时间段
	 * @param vin
	 * @return
	 */
	public ResponseResult<List<String>> getTrajectoryTime(String vin);

	/**
	 * 根据vin获取车辆轨迹
	 * @param vin
	 * @return
	 */
	public List<IovTrajectoryVo> getTrajectory(String vin, String startTime, String endTime);

	/**
	 * 车辆列表导出
	 * @param selectParams
	 * @return
	 */
	public List<CarVo> getCarListDownload(Map<String, Object> selectParams) throws Exception;

	public long getCarListDownloadCount(Map<String, Object> selectParams) throws Exception;

	public Boolean getCarListDownloadEmail(Map<String, Object> selectParams,UserEntity user)throws Exception;

	/**
	 * 根据车辆vin集合查询车辆信息
	 * @param vinList
	 * @return
	 */
	public List<CarDto> getByVinList(List<String> vinList);

	/**
	 * 获取车辆信息 （企业订单添加使用）
	 * @param vin
	 * @param vehicleId
	 * @return
	 */
	CarVo getCarByVin(String vin,Integer vehicleId);

    /**
     * 获取车辆里程
     * @param vin
     * @return
     */
	Integer getCarOdoMileage(String vin);
	
	
	/**
	 * 获取车辆信息 （专属里程，订阅服务）
	 * @param vin
	 * @return
	 */
	CarVo getCarByVin(String vin);


}
